Mocking এবং Stubbing টেস্টিংয়ের গুরুত্বপূর্ণ কৌশল, যা unit testing এবং integration testing এর সময় ব্যবহার করা হয়। Groovy তে এবং বিশেষত Spock Framework ব্যবহার করে আপনি সহজেই mocking এবং stubbing এর মাধ্যমে কোডের বিভিন্ন অংশের আচরণ চেক করতে পারেন। এই দুটি টেস্টিং কৌশল আপনাকে বাইরের ডিপেন্ডেন্সি, যেমন ডাটাবেস, API, অথবা সার্ভিস কলের প্রভাব এড়িয়ে যেতে সহায়তা করে।
Mocking হল একটি টেস্টিং কৌশল, যেখানে আপনি কোনো নির্দিষ্ট অবজেক্ট বা ক্লাসের আচরণ জেনেশুনে নির্ধারণ করেন, যাতে আপনি তার ফলাফল এবং আচরণগুলি নিয়ন্ত্রণ করতে পারেন। এটি সাধারণত টেস্টের জন্য অবজেক্টের বা মেথডের আচরণ “প্রত্যাশা” নির্ধারণ করে।
Mocking এর মাধ্যমে আপনি নির্দিষ্ট অবজেক্টের method calls এবং তাদের return values নির্ধারণ করতে পারেন, যা আসল অ্যাপ্লিকেশন কোডের জন্য নির্দিষ্ট করা হয় না।
import spock.lang.Specification
class MyService {
def getData() {
// এখানে ডেটা ফেচিং বা API কল হতে পারে
return "Real Data"
}
}
class MyServiceTest extends Specification {
def "test mocked service"() {
given:
def mockService = Mock(MyService)
when:
mockService.getData() >> "Mocked Data" // মক করা হচ্ছে
then:
mockService.getData() == "Mocked Data" // প্রত্যাশিত ফলাফল
}
}
এখানে:
Mock(MyService)
একটি মক অবজেক্ট তৈরি করেছে, যা getData()
মেথডকে "Mocked Data"
রিটার্ন করতে নির্দেশ দিয়েছে।>>
এর মাধ্যমে মক অবজেক্টের রিটার্ন ভ্যালু নির্ধারণ করা হয়।Stubbing হল আরেকটি টেস্টিং কৌশল, যেখানে আপনি একাধিক মেথড বা অবজেক্টের আচরণ সেট করতে পারেন, কিন্তু এই কৌশলে আপনি ফাংশনের ফলাফল বা return value নির্ধারণ করে থাকেন। স্টাবিং সাধারণত মকিংয়ের তুলনায় একটু সহজ এবং এটি প্রধানত ব্যবহৃত হয় যখন আপনি কোনও নির্দিষ্ট ফাংশন বা মেথডের আউটপুট নিয়ন্ত্রণ করতে চান।
Stubbing আপনার মেথড কলগুলোকে সত্যিই কার্যকর না করে, তাদের প্রাক-নির্ধারিত রিটার্ন ভ্যালু দিয়ে স্টাব করে।
import spock.lang.Specification
class MyService {
def getData() {
// API বা অন্য ডিপেন্ডেন্সি কলের জন্য বাস্তব কাজ
return "Real Data"
}
}
class MyServiceTest extends Specification {
def "test stubbed service"() {
given:
def stubbedService = Stub(MyService)
when:
stubbedService.getData() >> "Stubbed Data" // স্টাবিং করা হচ্ছে
then:
stubbedService.getData() == "Stubbed Data" // প্রত্যাশিত ফলাফল
}
}
এখানে:
Stub(MyService)
ব্যবহার করে একটি স্টাব অবজেক্ট তৈরি করা হয়েছে, যা getData()
মেথডে "Stubbed Data"
রিটার্ন করবে।>>
ব্যবহার করে স্টাব মেথডের আউটপুট নির্ধারণ করা হয়েছে।বৈশিষ্ট্য | Mocking | Stubbing |
---|---|---|
মুল উদ্দেশ্য | টেস্টে ব্যবহৃত অবজেক্টের আচরণ নির্ধারণ করা। | শুধুমাত্র মেথড কলের আউটপুট নির্ধারণ করা। |
টেস্টের ফোকাস | মক অবজেক্টের মেথড কল এবং তাদের প্রত্যাশিত আচরণ। | মেথডের আউটপুটের উপর ভিত্তি করে টেস্ট। |
ব্যবহার | মক অবজেক্টের সাথে সম্পর্কিত মেথড কল প্রত্যাশিত করা। | স্টাব মেথড কলের রিটার্ন ভ্যালু নির্ধারণ করা। |
তথ্য যাচাই | মক অবজেক্টের মেথড কতবার কল হয়েছে তা যাচাই করা। | শুধুমাত্র মেথডের আউটপুট যাচাই করা। |
Spock Framework Groovy তে একটি অত্যন্ত জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা Mocking এবং Stubbing সহজভাবে এবং সুশৃঙ্খলভাবে পরিচালনা করতে সহায়তা করে। Spock এর মাধ্যমে আপনি নিম্নলিখিত কৌশলগুলির মধ্যে পার্থক্য করতে পারবেন এবং প্রয়োগ করতে পারবেন:
common.read_more